//如果设置了默认值的参数不是尾参数，那么length属性也不再计入后面的参数了。
// (function (a = 0, b, c) { }).length // 0
//     (function (a, b = 1, c) { }).length // 1

// 函数f调用时，参数y = x形成一个单独的作用域。这个作用域里面，变量x本身没有定义，所以指向外层的全局变量x。函数调用时，函数体内部的局部变量x影响不到默认值变量x。
let x = 1;

function f(y = x) {
    let x = 2;
    console.log(y);
    console.log(x);
}

f() // 1

let y = 1;
let g = 8
function foo(y) {
    console.log(y, '---y');
    console.log(g, '---g');
}

foo()

var result = (a, b) => a - b
console.log(result(3, 6));


//剩余数组接受的数字变量 返回数组
const numbers = (...nums) => {
    console.log(...nums);//1 2 3 4 5 nums是数组  ...是展开
    return nums;
};

console.log(numbers(1, 2, 3, 4, 5));
// [1,2,3,4,5]

// function ff() {
//     console.log(this, '---this');
// }
// ff()  this是window


// function foo() {
//     setTimeout(() => {
//         console.log('id:', this.id);
//     }, 100);
// }

// var id = 21;

// foo.call({ id: 42 })
// id: 42



function foo() {
    setTimeout(() => {
        console.log('id:', this.id);
    }, 300);
}
foo()

function foo() {
    console.log(this, '---this');
    return () => {
        return () => {
            return () => {
                console.log('id:', this.id);
            };
        };
    };
}

var f = foo.call({ id: 1 });
